#!/bin/bash

# list_all_users.sh
# 功能说明:
# 1. 列出系统中所有用户的详细信息，包括用户名、用户 ID、主目录和登录 Shell。
# 2. 支持将输出结果保存到文件（可选）。
# 3. 按用户 ID 排序，优先显示普通用户。

# 定义输出格式化函数
print_user_info() {
  local username="$1"
  local uid="$2"
  local home="$3"
  local shell="$4"
  printf "%-20s %-10s %-30s %-20s\n" "$username" "$uid" "$home" "$shell"
}

# 主函数
main() {
  local output_file=""

  # 检查命令行参数是否指定了输出文件
  if [[ "$1" == "-o" && -n "$2" ]]; then
    output_file="$2"
    echo "Saving output to file: $output_file"
  fi

  # 打印表头
  printf "%-20s %-10s %-30s %-20s\n" "Username" "User ID" "Home Directory" "Login Shell"
  printf "%-20s %-10s %-30s %-20s\n" "--------" "--------" "--------------" "-----------"

  # 遍历 /etc/passwd 文件，提取用户信息
  while IFS=: read -r username password uid gid comment home shell; do
    print_user_info "$username" "$uid" "$home" "$shell"
  done < /etc/passwd | sort -k2 -n

  # 如果指定了输出文件，将结果保存到文件
  if [[ -n "$output_file" ]]; then
    while IFS=: read -r username password uid gid comment home shell; do
      printf "%-20s %-10s %-30s %-20s\n" "$username" "$uid" "$home" "$shell" >> "$output_file"
    done < /etc/passwd
    echo "Output saved to $output_file."
  fi
}

# 执行主函数
main "$@"

